/*
	自定义全局工具
	
	使用步骤
	一、加入默认配置及文件
		1. 运行 auto_add_start_file 中的run指令进行依赖文件及配置的安装（注：需要先配置目标项目路径，使用后注意还原代码）
		
	二、其他依赖文件
		1. 处理所有文件中不兼容的写法
			@tap.native	=> 	@click.stop		【APP中无效，通用性差，摒弃使用】
	
 */
import uView from '@/uview-ui';
import routerInterceptorMixin from './routerInterceptor.js';
import onNetworkStatusChangeMixin from './onNetworkStatusChange'
import { initNav } from './qidong.js'
import { http } from '@/common/api/index.js';

const apiFix = 'm2236'

/** 自定义请求 */
export function post(url = '', data = {}) {
	return new Promise((resolve, reject) => {
		http.post(`/${apiFix}/${url}`, data).then(res => {
			if (res.data.code == 1) resolve(res.data);
			else reject(res.data);
		}).catch(err => { reject(err?.data || {}) });
	})
}

export const appMixins = {
	mixins: [routerInterceptorMixin, onNetworkStatusChangeMixin],
	onLaunch(options) {
		// 热更新
		this.$store.dispatch("updateVersion");

		// 初始化导航
		initNav(options);

		// 全局变量
		uni.$api = this.$api;
		uni.apiFix = apiFix;

		// 初始化用户信息
		this.$store.commit('initApp');
		this.resetGetUserInfo();
	},
}


export default function(Vue) {

	Vue.prototype.apiFix = apiFix;

	// 自定义请求方法
	Vue.prototype.$post = post;

	// 自定义消息提示
	Vue.prototype.$msg = title => uni.showToast({ title, icon: 'none' })

	// uview
	Vue.use(uView)

	// 上架状态监听
	Vue.mixin({
		computed: {
			/** 是否上架成功(用于隐藏上架时需要规避的功能) <view v-if="isGroundingSuccess">需要显示的内容</view> */
			isGroundingSuccess() { return this.$store.state.isGroundingSuccess },
		},
		methods: {
			/** 防抖处理 */
			async antiShakeFn(proName, callBack) {
				if (!proName || !callBack) return;
				this[proName] = true;
				try { await callBack() } catch (e) {}
				this[proName] = false;
			},
			/** 最小请求 */
			async minTimeRequest(callBack = () => {}, complate = () => {}) {
				const startTimer = Date.now();
				try { await callBack(); } catch (e) {}
				setTimeout(() => { complate() }, 300 - (Date.now() - startTimer));
			},
			/** 去首页 */
			cToHome() {
				if (this.$store.state.token) uni.reLaunch({ url: '/pages/tabBar/home/home' });
				else uni.reLaunch({ url: '/pages/tabBar/passwordLogin/passwordLogin' });
			},
			/** 获取用户信息 */
			async resetGetUserInfo() {
				if (!uni.getStorageSync('USER_TOKEN')) return;
				var res = await this.$api.post(`/${this.apiFix}/5c78c4772da97`, {});
				if (res.data.code == 1) this.$store.commit('updateUserInfo', res.data.data || {})
			},
		}
	});

	/**
	 * 权限拦截
	 * @return {Boolean} false;
	 * @example if(this.noPremiss) return;
	 */
	Vue.prototype.noPremiss = function() {
		const _token = !!uni.getStorageSync('USER_TOKEN');
		if (!_token) uni.navigateTo({ url: "/pages/index/login" })
		return !_token;
	}
}